﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Trade.Library.Logs
{
    /// <summary>
    /// 日志接口
    /// </summary>
    public interface ILog
    {
        /// <summary>
        /// debug调试信息日志是否可用
        /// </summary>
        /// <value>
        /// 	<c>true</c> debug调试信息可用; 其它, <c>false</c>.
        /// </value>
        bool IsDebugEnabled { get; }

        /// <summary>
        /// 一般错误信息日志是否可用
        /// </summary>
        /// <value>
        /// 	<c>true</c> 可用; 其它, <c>false</c>.
        /// </value>
        bool IsErrorEnabled { get; }

        /// <summary>
        /// 致命错误信息日志是否可用
        /// </summary>
        /// <value>
        /// 	<c>true</c> 可用; 其它, <c>false</c>.
        /// </value>
        bool IsFatalEnabled { get; }

        /// <summary>
        /// 一般信息日志是否可用
        /// </summary>
        /// <value>
        /// 	<c>true</c> 可用; 其它, <c>false</c>.
        /// </value>
        bool IsInfoEnabled { get; }

        /// <summary>
        /// 警告信息日志是否可用
        /// </summary>
        /// <value>
        /// 	<c>true</c> 可用; 其它, <c>false</c>.
        /// </value>
        bool IsWarnEnabled { get; }

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="message">信息内容</param>
        void Debug(object message);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception">异常</param>
        void Debug(object message, Exception exception);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void DebugFormat(string format, object arg0);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void DebugFormat(string format, params object[] args);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void DebugFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void DebugFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录debug日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void DebugFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="message"></param>
        void Error(object message);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Error(object message, Exception exception);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void ErrorFormat(string format, object arg0);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void ErrorFormat(string format, params object[] args);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void ErrorFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void ErrorFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Error日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void ErrorFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="message"></param>
        void Fatal(object message);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Fatal(object message, Exception exception);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void FatalFormat(string format, object arg0);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void FatalFormat(string format, params object[] args);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void FatalFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void FatalFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Fatal日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void FatalFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="message"></param>
        void Info(object message);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Info(object message, Exception exception);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void InfoFormat(string format, object arg0);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void InfoFormat(string format, params object[] args);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void InfoFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void InfoFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Info日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void InfoFormat(string format, object arg0, object arg1, object arg2);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="message"></param>
        void Warn(object message);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="message"></param>
        /// <param name="exception"></param>
        void Warn(object message, Exception exception);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        void WarnFormat(string format, object arg0);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void WarnFormat(string format, params object[] args);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="provider"></param>
        /// <param name="format"></param>
        /// <param name="args"></param>
        void WarnFormat(IFormatProvider provider, string format, params object[] args);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        void WarnFormat(string format, object arg0, object arg1);

        /// <summary>
        /// 记录Warn日志信息
        /// </summary>
        /// <param name="format"></param>
        /// <param name="arg0"></param>
        /// <param name="arg1"></param>
        /// <param name="arg2"></param>
        void WarnFormat(string format, object arg0, object arg1, object arg2);
    }
}
